home *** CD-ROM | disk | FTP | other *** search
/ Internet News 1999 March / InternetNews_1999_03.iso / pc / Grafica / Photoshop 5.0 Tryout / archive.z / EPS Parser.8by / POST / %PSINIT < prev   
Text File  |  1998-05-06  |  20KB  |  562 lines

  1. % InterpreterInit.ps
  2. %
  3. % This file initializes the interpreter to its startup state.
  4. % On entry, systemdict and userdict are both writable and on the dict stack.
  5. % systemdict has all built-in operators defined, and userdict is empty.
  6. %
  7. % AUTHOR
  8. %    Sam L. Weiss
  9. %    
  10. % MODIFICATION HISTORY
  11. %    02/15/96        Sam Weiss        Release 1.0
  12.     
  13.  
  14.  
  15. % initialize systemdict
  16.  
  17.  
  18. systemdict begin
  19.  
  20.     /version (47.0) def
  21.     /revision cvx 0 def
  22.     
  23.     /=string {userdict /=string known not {userdict /=string 128 string put} if userdict /=string get} bind def
  24.     /=print {dup type /stringtype ne {=string cvs} if print} bind def
  25.     /= {//=print exec (\n) print} bind def
  26.     /stack {0 1 count 3 sub {index =} for} bind def
  27.     /pstack {0 1 count 3 sub {index ==} for} bind def
  28.     /prompt {(PS>) print flush} bind def
  29.     /Run {dup == flush run} bind def
  30.     
  31.     
  32.     % create and initialize $error dictionary
  33.  
  34.  
  35.     20 dict dup begin
  36.         /newerror false def
  37.         /errorname null def
  38.         /command null def
  39.         /errorinfo null def
  40.         /ostack null def
  41.         /estack null def
  42.         /dstack null def
  43.         /recordstacks false def
  44.         /binary false def
  45.         /ostackarray null def
  46.         /estackarray null def
  47.         /dstackarray null def
  48.         /initializing true def
  49.         /inerror false def
  50.     end /$error exch def
  51.     
  52.     
  53.     % define .error procedure, which is referenced by each default error handler
  54.  
  55.  
  56.     /.error {
  57.         //$error /setshared known {false setshared} if
  58.         //$error /inerror get {pop pop stop} if        % disallow re-entry
  59.         //$error /inerror true put                            % guard against re-entry
  60.         //$error exch /errorname exch put                % load error name
  61.         //$error exch /command exch put                    % load offending command
  62.         //$error /newerror true put                         % flag new error
  63.     
  64.         % if the offending command is a string with length > 128
  65.         % then cap the length
  66.     
  67.         //$error /command get type /stringtype eq {    % is command a string?
  68.             //$error /command get length 128 gt {        % is the string length > 128
  69.                 //$error /command get                        % get string
  70.                 0 128 getinterval                                % get subinterval
  71.                 //$error exch /command exch put            % store it back in $error
  72.             } if
  73.         } if
  74.         
  75.         % if recording stacks and this isn't a VM error...
  76.     
  77.         //$error /recordstacks get //$error /errorname get /VMerror ne and {
  78.         
  79.             //$error /ostackarray get null eq {            % if there is no snapshot of operand stack
  80.                 //$error /estackarray 250 array put        % allocate a snapshot of exec stack
  81.                 //$error /ostackarray 500 array put        % allocate a snapshot of operand stack
  82.                 //$error /dstackarray 20 array put        % allocate a snapshot of dictionary stack
  83.             } if
  84.             
  85.             count                                            % count operand stack
  86.             //$error /ostackarray get
  87.             exch 0 exch    getinterval                    % get subinterval big enough for operand stack snapshot
  88.             //$error exch /ostack exch put        % store subinterval in $error named ostack
  89.             
  90.             % copy operand stack into ostack array
  91.             
  92.             count 1 sub -1 0 {                    % for (i = count - 1; i >= 0; --i)
  93.                 //$error /ostack get exch
  94.                 2 index put
  95.                 count 1 roll
  96.             } for
  97.             
  98.             % copy dictionary stack into dstackarray and associate with dstack in //$error
  99.             
  100.             //$error /dstack
  101.                 //$error /dstackarray get dictstack
  102.             put
  103.             
  104.             % copy execution stack into estackarray and associate with estack in $error
  105.             % we don't copy the top element on the execution stack (since it is this
  106.             % error handler itself)
  107.             
  108.             //$error /estack
  109.                 //$error /estackarray get execstack
  110.                 dup length 2 sub 0 exch getinterval
  111.             put
  112.             
  113.         } if    % recording stacks and not a VM error
  114.         
  115.         % if the interpreter encouters an error while initializing,
  116.         % the server loop may not yet be running, so we invoke handleerror ourselves
  117.         
  118.         //$error /initializing get {handleerror} if
  119.         //$error /inerror false put
  120.         stop
  121.         
  122.     } bind def
  123.     
  124.     
  125.     % create and initalize errordict
  126.     
  127.     
  128.     32 dict dup begin
  129.         /configurationerr {/configurationerr //.error exec} bind def
  130.         /dictfull {/dictfull //.error exec} bind def
  131.         /dictstackoverflow {/dictstackoverflow //.error exec} bind def
  132.         /dictstackunderflow {/dictstackunderflow //.error exec} bind def
  133.         /execstackoverflow {/execstackoverflow //.error exec} bind def
  134.         /interrupt {/interrupt /interrupt //.error exec} bind def
  135.         /invalidaccess {/invalidaccess //.error exec} bind def
  136.         /invalidcontext {/invalidcontext //.error exec} bind def
  137.         /invalidexit {/invalidexit //.error exec} bind def
  138.         /invalidfileaccess {/invalidfileaccess //.error exec} bind def
  139.         /invalidfont {/invalidfont //.error exec} bind def
  140.         /invalidid {/invalidid //.error exec} bind def
  141.         /invalidrestore {/invalidrestore //.error exec} bind def
  142.         /ioerror {/ioerror //.error exec} bind def
  143.         /limitcheck {/limitcheck //.error exec} bind def
  144.         /nocurrentpoint {/nocurrentpoint //.error exec} bind def
  145.         /rangecheck {/rangecheck //.error exec} bind def
  146.         /stackoverflow {/stackoverflow //.error exec} bind def
  147.         /stackunderflow {/stackunderflow //.error exec} bind def
  148.         /syntaxerror {/syntaxerror //.error exec} bind def
  149.         /timeout {/timeout /timeout //.error exec} bind def
  150.         /typecheck {/typecheck //.error exec} bind def
  151.         /undefined {/undefined //.error exec} bind def
  152.         /undefinedfilename {/undefinedfilename //.error exec} bind def
  153.         /undefinedresource {/undefinedresource //.error exec} bind def
  154.         /undefinedresult {/undefinedresult //.error exec} bind def
  155.         /unmatchedmark {/unmatchedmark //.error exec} bind def
  156.         /unregistered {/unregistered //.error exec} bind def
  157.         /VMerror {/VMerror //.error exec} bind def
  158.     
  159.         /handleerror {
  160.             //$error begin
  161.                 /inerror false def
  162.                 newerror {
  163.                     /newerror false def 
  164.                     (%%[ Error: ) print
  165.                     errorname //=print exec 
  166.                     (; OffendingCommand: ) print
  167.                     /command load //=print exec 
  168.                     //$error /errorinfo known {
  169.                         errorinfo type /arraytype eq {
  170.                             (; ErrorInfo:) print
  171.                             0 1 errorinfo length dup 2 gt {pop 2} if 1 sub
  172.                             {( ) print errorinfo exch get //=print exec} for
  173.                             /errorinfo //null def
  174.                         } if
  175.                     } if
  176.                     ( ]%%\n) print
  177.                     flush
  178.                 } if
  179.             end
  180.         } bind def
  181.     end /errordict exch def
  182.  
  183.     
  184.     % define systemdict version of handleerror
  185.     
  186.     
  187.     /handleerror {//errordict /handleerror get exec} bind def
  188.     
  189.     
  190.     % create and initalize statusdict
  191.  
  192.  
  193.     25 dict dup begin
  194.         /pagecount {1} def
  195.         /setpagestackorder {pop} def
  196.         /pagestackorder {false} def
  197.         /setprintername {pop} bind def 
  198.         /printername {product exch copy} bind def 
  199.         /setdostartpage {pop} bind def
  200.         /dostartpage {false} def
  201.         /setmargins {pop pop} bind def
  202.         /margins {0 0} def 
  203.         /setdefaulttimeouts {pop pop pop} bind def
  204.         /defaulttimeouts {0 60 30} def
  205.         /setjobtimeout {pop} def 
  206.         /jobtimeout {0} def 
  207.         /manualfeedtimeout 60 def
  208.         /waittimeout cvx 300 def
  209.         /manualfeed false def
  210.         /jobstate () def
  211.         /jobname cvx () def
  212.         /product cvx (Nessie) readonly def
  213.         /revision cvx 0 def
  214.         /processcolors {4} def
  215.         /lettertray {} def
  216.         /legaltray {} def
  217.         /a4tray {} def
  218.         /b5tray {} def
  219.         /papertray {0} def
  220.         /setpapertray {pop} bind def
  221.         /defaultpapertray {0} def
  222.         /setdefaultpapertray {pop} bind def
  223.         /papersize {/lettertray true} def
  224.     end /statusdict exch def
  225.     
  226.     
  227.     % initalize serverdict
  228.     
  229.     
  230.     10 dict dup /serverdict exch def begin
  231.         /stdin null def
  232.         /stdout null def
  233.         /inserver true def
  234.         /settimeouts {} def
  235.         
  236.         /execjob {
  237.         
  238.             //statusdict begin
  239.                 /jobstate (idle) def
  240.                 /jobname () def
  241.             end
  242.             
  243.             //$error /doclose true put
  244.             //systemdict /execdict get /quitflag false put
  245.             clear
  246.             cleardictstack
  247.             
  248.             //serverdict /enableinterrupt get exec
  249.             //serverdict /stdin get stopped
  250.             //serverdict /disableinterrupt get exec
  251.             
  252.             % if error executing stdin...
  253.             
  254.             {
  255.                 {
  256.                     //$error newerror get {
  257.                         //errordict /handlerror get exec
  258.                     } if
  259.                 
  260.                     //serverdict begin
  261.                         stdin status doclose and {
  262.                             (%%[ Flushing: rest of job (to end-of-file) will be ignored ]%%)
  263.                             = flush
  264.                             stdin flushfile
  265.                         } if
  266.                     end % serverdict
  267.                 } stopped
  268.                 {
  269.                     //serverdict /stdin get resetfile
  270.                     //serverdict /stdout get resetfile
  271.                     //$error /doclose true put
  272.                 } if % stopped
  273.             } if % stopped
  274.             
  275.             //$error /doclose get {
  276.                 {//serverdict /stdout get closefile} stopped
  277.                 {//serverdict /stdin get closefile} stopped
  278.             } if
  279.             
  280.             clear
  281.             cleardictstack
  282.             initgraphics
  283.             erasepage
  284.             
  285.         }  bind executeonly def
  286.  
  287.         /server {
  288.             {
  289.                 //serverdict begin
  290.                     save /serverstate exch def
  291.                         {jobavailable {exit} if} loop 
  292.                         beginjob
  293.                             /stdin (%stdin) (r) file cvx def
  294.                             /stdout (%stdout) (w) file def
  295.                             execjob
  296.                         //serverdict endjob get exec
  297.                     //serverdict /serverstate get restore
  298.             } loop
  299.         } bind executeonly def
  300.  
  301.         /exitserver {
  302.             clear
  303.             cleardictstack
  304.             initgraphics
  305.             erasepage
  306.         } bind executeonly def
  307.         
  308.         currentdict readonly pop    % make serverdict read-only
  309.     end
  310.     
  311.     
  312.     % create and initalize execdict
  313.  
  314.  
  315.     10 dict dup begin
  316.         /execdepth 0 def
  317.         /binary false def
  318.         /quitflag false def
  319.         /stmtfile 0 def
  320.         /setstreams {} def
  321.         /idleproc {/idleproc {} def //serverdict begin 0 0 settimeouts end} bind def
  322.         /copyright (Copyright (c) 1984-1995 Adobe Systems Incorporated.\nTypefaces Copyright (c) 1981 Linotype AG and/or its subsidiaries.\nAll Rights Reserved.) def
  323.         /banner {//currentdict begin (PostScript(r) Version ) print version print (\n) print copyright print end} bind def
  324.         /nestprompt {(PS) print execdepth {(>) print} repeat flush} bind def
  325.         /checkquit {quitflag {exit} if} bind def
  326.     end /execdict exch def
  327.         
  328.  
  329.     % create and initalize FontDirectory
  330.  
  331.  
  332.     /FontDirectory 40 dict readonly def
  333.     
  334.  
  335.     % define findfont procedure
  336.     
  337.     
  338.     /findfont {
  339.         //systemdict /FontDirectory get exch
  340.         2 copy known
  341.         {get} 
  342.         {
  343.             exch pop {platformfindfont} stopped
  344.             {pop //$error /command /findfont put stop} if
  345.         }
  346.         ifelse
  347.     } bind def
  348.     
  349.     
  350.     % define start procedure
  351.     
  352.     
  353.     /start {
  354.         //serverdict begin 
  355.             disableinterrupt 
  356.             setstreams 
  357.         
  358.             //$error begin 
  359.                 /initializing false def
  360.                 /binary false def
  361.                 /recordstacks true def
  362.             end 
  363.             
  364.     %        //productinit
  365.         cleardictstack
  366.         //serverdict /server get exec
  367.     } bind def
  368.     
  369.     
  370.     % define StandardEncoding
  371.     
  372.     
  373.     /StandardEncoding [
  374.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  375.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  376.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  377.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  378.       /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
  379.       /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
  380.       /zero /one /two /three /four /five /six /seven
  381.       /eight /nine /colon /semicolon /less /equal /greater /question
  382.       /at /A /B /C /D /E /F /G
  383.       /H /I /J /K /L /M /N /O
  384.       /P /Q /R /S /T /U /V /W
  385.       /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
  386.       /quoteleft /a /b /c /d /e /f /g
  387.       /h /i /j /k /l /m /n /o
  388.       /p /q /r /s /t /u /v /w
  389.       /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
  390.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  391.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  392.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  393.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  394.       /.notdef /exclamdown /cent /sterling /fraction /yen /florin /section
  395.       /currency /quotesingle /quotedblleft /guillemotleft /guilsinglleft /guilsinglright /fi /fl
  396.       /.notdef /endash /dagger /daggerdbl /periodcentered /.notdef /paragraph /bullet
  397.       /quotesinglbase /quotedblbase /quotedblright /guillemotright /ellipsis /perthousand /.notdef /questiondown
  398.       /.notdef /grave /acute /circumflex /tilde /macron /breve /dotaccent
  399.       /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
  400.       /emdash /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  401.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  402.       /.notdef /AE /.notdef /ordfeminine /.notdef /.notdef /.notdef /.notdef
  403.       /Lslash /Oslash /OE /ordmasculine /.notdef /.notdef /.notdef /.notdef
  404.       /.notdef /ae /.notdef /.notdef /.notdef /dotlessi /.notdef /.notdef
  405.       /lslash /oslash /oe /germandbls /.notdef /.notdef /.notdef /.notdef
  406.     ] readonly def
  407.     
  408.     
  409.     % define ISOLatin1Encoding
  410.     
  411.     
  412.     /ISOLatin1Encoding [
  413.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  414.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  415.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  416.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  417.       /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
  418.       /parenleft /parenright /asterisk /plus /comma /minus /period /slash
  419.       /zero /one /two /three /four /five /six /seven
  420.       /eight /nine /colon /semicolon /less /equal /greater /question
  421.       /at /A /B /C /D /E /F /G
  422.       /H /I /J /K /L /M /N /O
  423.       /P /Q /R /S /T /U /V /W
  424.       /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
  425.       /quoteleft /a /b /c /d /e /f /g
  426.       /h /i /j /k /l /m /n /o
  427.       /p /q /r /s /t /u /v /w
  428.       /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
  429.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  430.       /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  431.       /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
  432.       /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
  433.       /space /exclamdown /cent /sterling /currency /yen /brokenbar /section
  434.       /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
  435.       /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
  436.       /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
  437.       /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
  438.       /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
  439.       /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
  440.       /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
  441.       /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
  442.       /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
  443.       /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
  444.       /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
  445.     ] readonly def
  446.  
  447.  
  448.     % define Symbol font
  449.     
  450.     
  451.     [
  452.         /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  453.         /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  454.         /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  455.         /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  456.         /space /exclam /universal /numbersign /existential /percent /ampersand /suchthat
  457.         /parenleft /parenright /asteriskmath /plus /comma /minus /period /slash
  458.         /zero /one /two /three /four /five /six /seven
  459.         /eight /nine /colon /semicolon /less /equal /greater /question
  460.         /congruent /Alpha /Beta /Chi /Delta /Epsilon /Phi /Gamma
  461.         /Eta /Iota /theta1 /Kappa /Lambda /Mu /Nu /Omicron
  462.         /Pi /Theta /Rho /Sigma /Tau /Upsilon /sigma1 /Omega
  463.         /Xi /Psi /Zeta /bracketleft /therefore /bracketright /perpendicular /underscore
  464.         /radicalex /alpha /beta /chi /delta /epsilon /phi /gamma
  465.         /eta /iota /phi1 /kappa /lambda /mu /nu /omicron
  466.         /pi /theta /rho /sigma /tau /upsilon /omega1 /omega
  467.         /xi /psi /zeta /braceleft /bar /braceright /similar /.notdef
  468.         /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  469.         /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  470.         /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  471.         /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  472.         /.notdef /Upsilon1 /minute /lessequal /fraction /infinity /florin /club
  473.         /diamond /heart /spade /arrowboth /arrowleft /arrowup /arrowright /arrowdown
  474.         /degree /plusminus /second /greaterequal /multiply /proportional /partialdiff /bullet
  475.         /divide /notequal /equivalence /approxequal /ellipsis /arrowvertex /arrowhorizex /carriagereturn
  476.         /aleph /Ifraktur /Rfraktur /weierstrass /circlemultiply /circleplus /emptyset /intersection
  477.         /union /propersuperset /reflexsuperset /notsubset /propersubset /reflexsubset /element /notelement
  478.         /angle /gradient /registerserif /copyrightserif /trademarkserif /product /radical /dotmath
  479.         /logicalnot /logicaland /logicalor /arrowdblboth /arrowdblleft /arrowdblup /arrowdblright /arrowdbldown
  480.         /lozenge /angleleft /registersans /copyrightsans /trademarksans /summation /parenlefttp /parenleftex
  481.         /parenleftbt /bracketlefttp /bracketleftex /bracketleftbt /bracelefttp /braceleftmid /braceleftbt /braceex
  482.         /apple /angleright /integral /integraltp /integralex /integralbt /parenrighttp /parenrightex
  483.         /parenrightbt /bracketrighttp /bracketrightex /bracketrightbt /bracerighttp /bracerightmid /bracerightbt /.notdef
  484.     ] readonly
  485.     
  486.     9 dict begin
  487.         /Encoding exch def
  488.         /FontType 1 def
  489.         /FontMatrix [.001 0 0 .001 0 0] def
  490.         /FontBBox {0 0 1000 1000} def
  491.         /FontInfo 2 dict dup begin
  492.             /UnderlinePosition -100 def
  493.             /UnderlineThickness 50 def
  494.         end def
  495.         /FontName /Symbol def
  496.         /PaintType 0 def
  497.         /Private 5 dict noaccess def
  498.         /CharStrings 256 dict dup begin Encoding {() def} forall end def
  499.         FontName currentdict definefont pop
  500.     end
  501.  
  502.  
  503.     % define == procedure
  504.     
  505.  
  506.     20 dict begin
  507.         /==dict currentdict def
  508.         /supplws false def
  509.         /cp 5 def
  510.         /rmargin 68 def
  511.         /cprint {dup length cp add /cp exch def print} bind def
  512.         /bprint {dup length cp add rmargin gt {(\n) print /cp 0 def /supplws false def} {supplws {/supplws false def} {( ) cprint} ifelse} ifelse} bind def
  513.         /tprint {bprint cprint} bind def
  514.         /typeprint {type =string cvs (type) search pop bprint (-) cprint cprint (-) cprint pop pop} bind def
  515.         /typeexec {dup type dup currentdict exch known {exec} {pop typeprint} ifelse} def
  516.         /substrprint {{{(\() (\)) (\\)} {search {substrprint (\\) cprint cprint true exit} if} forall dup type /stringtype eq {cprint exit} if pop} loop} bind def
  517.         /booleantype {=string cvs tprint} bind def
  518.         /integertype //booleantype def
  519.         /realtype //booleantype def
  520.         /arraytype {dup rcheck {(          ) bprint pop /supplws true def dup xcheck {({) cprint {typeexec} forall (}) cprint} {([) cprint {typeexec} forall (]) cprint} ifelse /supplws false def} {typeprint} ifelse} bind def
  521.         /packedarraytype //arraytype def
  522.         /operatortype {=string cvs bprint (--) cprint cprint (--) cprint} bind def
  523.         /stringtype {dup rcheck {dup length 200 gt exch 1 index {0 200 getinterval} if bprint (\() cprint substrprint {(...) cprint} if (\)) cprint} {typeprint} ifelse} bind def
  524.         /nametype {bprint dup xcheck not {(/) cprint} if =string cvs cprint} bind def
  525.         systemdict /== {//==dict begin mark {1 index /cp 0 def /supplws true def typeexec (\n) print} stopped {cleartomark end //$error /command /== put stop} if pop pop end} bind put
  526.     end % ==dict
  527.     
  528.     currentdict readonly pop    % make systemdict read-only
  529.  
  530. end % systemdict
  531.  
  532.  
  533. % initialize userdict
  534.  
  535.  
  536. /#copies 1 def
  537. /letter {} def
  538. /note {} def
  539. /legal {} def
  540. /a4 {} def
  541. /b5 {} def
  542. /lettersmall {} def
  543. /a4small {} def
  544.  
  545. /quit {//execdict /quitflag true put stop} bind def
  546.  
  547. /Courier findfont 9 scalefont setfont
  548.  
  549. $error /initializing false put
  550.  
  551.  
  552. /cshow where
  553. {
  554.     pop
  555. }
  556. {
  557.     /cshow {
  558.         [0 0 5 -1 roll aload pop] cvx bind forall
  559.     } bind def
  560. ifelse
  561.